<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      // 闭包的应用：
      // 1. 函数作为返回值
     //zll 5

      // var创建的变量没有块级作用域，那么在for循环中i一直会被改变，最终执行a[n]()，无论n是多少，打印出来都是10
      var a = []
      for (var i = 0; i < 10; i++) {
        a[i] = function () {
          console.log(i)
          
        }
        a[i]()
      }
      a[4]() // 10
      a[2]() // 10\


      // // let常见的变量每一次循环都会创建一个块级作用域，在这个块级作用域中定义了一个函数，
      // 函数又引入了外部的变量，那么就产生了闭包，也就是所有块级作用域里面的i都不会被销毁，循环
      // 了10次，那么具就船舰了10次块级作用域，这十个块级作用域中的i都会被保存到内容中
      // var a = []
      // for (let i = 0; i < 10; i++) {
      //   a[i] = function () {
      //     console.log(i)
      //   }
      //   a[i]()
      // }
      a[4]() // 4
      a[2]() // 2
    </script>
  </body>
</html>
